package asem.tablaSimbolos.tipo;

import alex.Token;
import asem.TablaSimbolos;

public class TipoClase extends Tipo {
	private Token nombre;

	public TipoClase(Token token) {
		nombre = token;
	}

	public String toString() {
		return nombre.getLexema();
	}

	@Override
	public boolean compatible(TipoMetodo t) {

		if (t.equals(TipoNull.TIPO))
			return true;

		if (t instanceof TipoVoid)
			return false;

		if (!(t instanceof TipoClase))
			return false;

		String tipoRecibido = t.toString();
		boolean tiposCompatibles = nombre.getLexema().equals(tipoRecibido);
		TablaSimbolos tabla = TablaSimbolos.tabla;

		while (!tiposCompatibles && !tipoRecibido.equals("Object")) {
			tipoRecibido = tabla.getClases().get(tipoRecibido).getHeredaDe();
			tiposCompatibles = nombre.getLexema().equals(tipoRecibido);
		}

		return tiposCompatibles;
	}
}
